iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
自我挑戰組

Micropython x ESP H/W 之三十個錦囊妙計系列 第 20

[錦囊XX] 程式掛掉後該如何自動重跑呢? [以try ... except為例]

  • 分享至 

  • xImage
  •  

程式掛掉後該如何自動重跑呢? 在microPython的官方文件中有寫到 machine 中有一個reset的功能

machine.reset()
Resets the device in a manner similar to pushing the external RESET button.

那可以在try .. exception 中的例外情況下直接設定這個嗎? 筆者曾經直接做過這個實驗, 不過 ... /images/emoticon/emoticon46.gif

[實作] 讓程式在掛掉後自動重跑 (以自動同步網路時間為例)

  • 類型一
  1. 在程式中加入try...except
  2. 在例外情況中設定machine.reset(), 自動重啟裝置
from ntptime import settime
try:
    print("Time sync")
    settime()
except:
    print ("Restart the service")
    machine.reset()

[秘訣]
(1) 這種設定方式的確會在遇到例外情況後直接重跑, 由於遇到例外情況後裝置就會重啟跟重跑, 所以當筆者使用Ctrl-C 組合鍵做中斷的時候就符合這個條件, 變成無窮的重啟跟重跑並且無法從程式中跳出
解法: 只能使用ampy 把main.py直接刪除才有效或者重刷F/W

ampy -p /dev/ttyUSB0 -b115200 rm main.py

(2) 筆者發現, 使用webrepl client 不一定可以順利登入
(3) machine.reset(): 當執行這命令時會強制做** soft reset**裝置的行為

  • 類型二
  1. 在原始程式中加try ... except 和while True迴圈
  2. 在screen log 中印出遇到例外情況的原因
from ntptime import settime
while True:
    try:
        print("Time sync")
        settime()
    except Exception as ex:
        print ("[Exception]: {0}".format(ex.args))
        pass

[秘訣] 使用這個寫法就可以在程式掛掉後自動重啟, 若使用者使用ctrl-C的組合按鍵也可以使用中斷的方式中斷程式運行以利除錯


上一篇
[錦囊XIV] Sleep 的種類有哪些及如何喚醒睡眠中的裝置呢?
下一篇
[錦囊-貳拾壹] ESP x MicroPython只能做prototype 嗎?
系列文
Micropython x ESP H/W 之三十個錦囊妙計31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言